<!DOCTYPE html>
<html>
  <head>
    <title>数组</title>
    <style></style>
  </head>
  <body>
    <p>
      <span></span>
      <span></span>
      <span></span>
    </p>
    <script>
      // 只挑了一部分
      //   ------------------------------------------------------------------------------------
      //   Array.from() ，将类数组转化为真正的数组，可以用于dom类数组
      console.log(Array.from(document.getElementsByTagName('p')[0].childNodes))
      console.log('----------------------------')

      //   ------------------------------------------------------------------------------------
      //   Array.of() ，将一组值转化为数组，避免了原始方法不同参数数量的差异
      console.log(Array(3)) // [,,,]
      console.log(Array.of(3)) // [3]

      //   ------------------------------------------------------------------------------------
      //   copyWithin() ，会改变原数组。
      //   它接受三个参数。
      //   target（必需）：从该位置开始替换数据。如果为负值，表示倒数。
      //   start（可选）：从该位置开始读取数据，默认为 0。如果为负值，表示从末尾开始计算。
      //   end（可选）：到该位置前停止读取数据，默认等于数组长度。如果为负值，表示从末尾开始计算。

      let arr = [1, 2, 3, 4, 5]
      arr.copyWithin(0, 3)
      // [4, 5, 3, 4, 5]

      //   ------------------------------------------------------------------------------------
      //   find()
      //   findIndex()
      //   findLast()
      //   findLastIndex()
      //   常用，不予赘述

      //   ------------------------------------------------------------------------------------
      //   fill() ，用于填充数组；接受三个参数，target, start(可选), end(可选)
      arr = []
      arr.length = 10
      arr.fill(999, 5, 8)
      console.log('fill:', arr)
      console.log('----------------------------')

      //   ------------------------------------------------------------------------------------
      //   entries()，keys() 和 values()，用于生成遍历器对象，分别是键值对、键、值
      arr = [1, 2, 3, 4, 5]
      for (let i of arr.entries()) {
        console.log(i)
      }
      console.log('----------------------------')
      for (let i of arr.values()) {
        console.log(i)
      }
      console.log('----------------------------')

      //   ------------------------------------------------------------------------------------
      //   includes()，是否包含
      console.log(arr.includes(5))

      //   ------------------------------------------------------------------------------------
      //   flat() ，用于“拉平”数组。默认只拉平一层，可以通过参数设置“拉平”层数；infinity表示全部拉平
      arr = [
        [
          [1, 2],
          [3, 4],
        ],
        [3, 4],
      ]
      console.log(arr.flat(), arr.flat(Infinity))
      //   flatMap() ，对返回值flat了一下
      console.log(arr.flatMap((item) => item)) // 这里等于arr.flat()

      //   ------------------------------------------------------------------------------------
      //   at() ，用于检索，支持了负值

      //   ------------------------------------------------------------------------------------
      //   group()和groupToMap()，数组内容分组
      //   还在提案阶段 2333
      //   arr = [1, 2, 3, 4, 5, 6]
      //   arr.group((item) => {
      //     return item % 2 == 0 ? 'even' : 'odd'
      //   })
      //   console.log(arr.groupBy)
      //   ------------------------------------------------------------------------------------
    </script>
  </body>
</html>
